#include <typescommon.h>
// 结构体按位分配与联合体

#pragma pack(1) //
struct MyStruct
{
    union // 匿名联合体c99
    {
        struct // 匿名结构体c99
        {
            // 安位分配成员变量空间。
            uint32_t a : 3; // 占0、1、2位。
            uint32_t b : 4; // 占3、4、5、6位。
            uint32_t c : 5; // 占7、8、9、10、11
        };
        uint32_t value;
    };
};
// 主要用于一些协议之中，根据不同命令，使用不同结构体。
// 备注：这里没有考虑大小端。如果都是小端系统、都是大端系统，没有问题。
#pragma pack()

int main(int argc, char **argv)
{
    struct MyStruct tmpstruct;
    tmpstruct.value = 0;
    tmpstruct.a = 1;
    tmpstruct.b = 5;
    tmpstruct.c = 12;
    logdebug("a=%d,b=%d,c=%d,value=0x%x", tmpstruct.a, tmpstruct.b, tmpstruct.c, tmpstruct.value);

    tmpstruct.value = 0x2233;
    logdebug("a=%d,b=%d,c=%d,value=0x%x", tmpstruct.a, tmpstruct.b, tmpstruct.c, tmpstruct.value);
    return 1;
}

// [2023-12-12 14:52:15.586][dbg][cstruct2.c,30]a=1,b=5,c=12,value=0x629
// [2023-12-12 14:52:15.748][dbg][cstruct2.c,33]a=3,b=6,c=4,value=0x2233
// 0x629 = 0B011000101001--->0B01100 0101 001 分别是12，5，1
// 0x2233 = 0B10001000110011--->0B10 00100 0110 011 分别是4， 6， 3
